package 日常作业;

//1. 青蛙跳台阶问题

/**
 * 小青蛙一次可以跳 1个台阶，或者2个台阶
 * 问：跳N个台阶有几种方法
 */
//import java.util.Scanner;
//public class Test_4_8_ZY {
//
//    public static void main(String[] args) {
//        Scanner sc = new Scanner(System.in);
//// 1 2 3 5 8 13
//        int a = sc.nextInt();
//        int rep = jump(a);
//        System.out.println("跳 " + a + " 个台阶有 = " + rep + " 种方法");
//    }
//    public static int jump(int num){
//
//        if(num == 1 || num == 2){
//            return num;
//        }else{
//
//            return  jump(num - 2) + jump(num - 1) ;
//        }
//    }
//}

// 2. 实现代码: 求解汉诺塔问题(提示, 使用递归)
/**
 * 三个柱子，第一个柱子上放了 N个圆盘，从小到大依次放着，一次只能移动一个圆盘（算一步）
 * 问： 当有N个圆盘时，把它们全部移动到第三根柱子上需要多少步
 */
//public class Test_4_8_ZY {
//    public static void main(String[] args) {
//
//        int a = 5;
//        int rep = move(a);
//        System.out.println("移动 " + a + " 个圆盘需要 = " + rep + " 步");
//    }
//    /*核心思路：移动N个圆盘，先吧上面N - 1个圆盘移到到第二根
//    * 柱子上，再移动第N个圆盘到第三根柱子上*/
//    public static int move(int num){
//
//        if(num == 1){
//            return 1;
//        }else if(num == 2){
//            return 3;
//        } else{
//
//            int sum = 0;
//
//            while(num-- > 0){
//                //先移走上面的 N - 1 个圆盘，再移动最先那个圆盘到第三根柱子上。
//                //每循环一次就可以让最下面的圆盘移动到最后的柱子上。
//                sum += move(num) + 1;
//            }
//            return sum;
//        }
//    }
//}


//3. 前N项斐波那契问题

/**
 * 从第三个值开始，每个值都是前两个值的和
 */
//import java.util.Scanner;
//public class Test_4_8_ZY {
//
//    public static void main(String[] args) {
//        Scanner sc = new Scanner(System.in);
//// 1 1 2 3 5 8 13
//        int a = sc.nextInt();
//        int rep = jump(a);
//        System.out.println("第" + a + "个斐波那契数值 = " + rep);
//    }
//    public static int jump(int num){
//
//        if(num == 1 || num == 2){
//            return 1;
//        }else{
//
//            return  jump(num - 2) + jump(num - 1) ;
//        }
//    }
//}

// 4. 返回的数字之和
/**写一个递归方法，输入一个非负整数，返回组成它的数字之和
 *
 */
//import java.util.Scanner;
//public class Test_4_8_ZY {
//
//    public static void main(String[] args) {
//        Scanner sc = new Scanner(System.in);
//        int a = sc.nextInt();
//        int rep = jump(a);
//        System.out.println(a + "各项数的和值 = " + rep);
//    }
//
//    public static int jump(int num) {
//
//        if(num < 10) {
//            return num;
//        }else{
//
//         return num % 10 + jump(num / 10);
//        }
//    }
//}

//5. 递归打印数字的每一位
/**
 * 按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4) （递归）
 */
//import java.util.Scanner;
//public class Test_4_8_ZY {
//
//    public static void main(String[] args) {
//        Scanner sc = new Scanner(System.in);
//        int a = sc.nextInt();
//        Print(a);
//    }
//    public static void Print(int num) {
//
//       if(num < 10){
//           System.out.print(num + " ");
//       }else{
//
//           Print(num / 10);
//           System.out.print(num % 10 + " ");
//       }
//    }
//}

//6. 递归求和
/**
 * 递归求 1 + 2 + 3 + ... + 10
 */
//import java.util.Scanner;
//public class Test_4_8_ZY {
//
//    public static void main(String[] args) {
//        Scanner sc = new Scanner(System.in);
//        int a = sc.nextInt();
//       int rep = Sum(a);
//        System.out.println("值 = " + rep);
//    }
//    public static int Sum(int num) {
//
//       if(num == 1){
//           return 1;
//       }else{
//
//          return num + Sum(num - 1);
//       }
//    }
//}

//7. 递归求 N 的阶乘

//import java.util.Scanner;
//public class Test_4_8_ZY {
//
//    public static void main(String[] args) {
//        Scanner sc = new Scanner(System.in);
//        int a = sc.nextInt();
//       int rep = layer(a);
//        System.out.println("前 " + a + " 项的阶层 = " + rep);
//    }
//    public static int layer(int num) {
//
//       if(num == 1){
//           return 1;
//       }else{
//
//          return num * layer(num - 1);
//       }
//    }
//}